home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / phagexsources.lha / source / AnimPlayer.s next >
Text File  |  1994-07-09  |  7KB  |  460 lines

  1. ; IFF Anim Player, plays 2 colour anims directly from DPaint. But it aint
  2. ; as fast as DPaint, cuz DP uses a different memory hungry / speedier
  3. ; routine.
  4.  
  5.     Opt    c-
  6.     Section    "AnimPlayer",Code_c
  7.  
  8.     IncDir    Df1:
  9.  
  10. Piccy1    = $c0000
  11. Piccy2    = $c3000
  12.  
  13. Start    Movem.l    d0-d7/a0-a6,-(sp) 
  14.     Bsr    KillSys      
  15.     
  16.     Lea    CopperList(pc),a0 
  17.     Lea    HardWare,a6      
  18.     Move.l    a0,Cop1Lc(a6)      
  19.     Move.w    #$83c0,DMACon(a6)
  20.  
  21.     Bsr    DoAnim
  22.         
  23.     Bsr    ReturnSys      
  24.     Movem.l    (sp)+,d0-d7/a0-a6 
  25.     Moveq    #0,d0      
  26.     Rts
  27.     
  28. DoAnim    Lea    FrameLists(pc),a0
  29.     Lea    FramePtr(pc),a1
  30.     Move.l    a0,(a1)
  31.     Bsr    ConvertIFF
  32.     Bsr    CopyIFF
  33.     Lea    FrameLists(pc),a0
  34.     Lea    FramePtr(pc),a1
  35.     Move.l    a0,(a1)
  36. AnimLoop    Bsr    VBL
  37.     Bsr    DoubleBuffer
  38.     Bsr    AnimFrame    
  39.     Btst    #6,$Bfe001
  40.     Bne    AnimLoop
  41.     Rts
  42.  
  43. DoubleBuffer    Lea    ScreenBase1(pc),a0
  44.     Move.l    0(a0),d0
  45.     Move.l    4(a0),d1
  46.     Move.l    d0,4(a0)
  47.     Move.l    d1,0(a0)
  48.  
  49.     Lea    CopperBPLS(pc),a0
  50.     Move.w    d0,6(a0)
  51.     Swap    d0
  52.     Move.w    d0,2(a0)
  53.     Rts
  54.  
  55. VBL    Move.l    $Dff004,d0
  56.     And.l    #$1ff00,d0
  57.     Cmp.l    #$13000,d0
  58.     Bne    VBL
  59.     Rts
  60.  
  61. ConvertIFF    Lea    AnimGFXData(pc),a1
  62.     Move.l    (a1)+,d0
  63.     Cmp.l    #'FORM',d0
  64.     Beq    FoundIFF
  65.     Rts
  66.  
  67. FoundIFF    Move.l    (a1)+,d1
  68. NewForm    Move.l    (a1)+,d0
  69.     Cmp.l    #"ANIM",d0
  70.     Beq    GetAnim
  71.     Cmp.l    #"ILBM",d0
  72.     Beq    GetAnim
  73.     Rts
  74.     
  75. GetAnim    Move.l    (a1)+,d0
  76.     Move.l    (a1)+,d1
  77.     Cmp.l    #"FORM",d0
  78.     Beq    NewForm
  79.     Cmp.l    #"BMHD",d0
  80.     Beq    GetBitVars
  81.     Cmp.l    #"BODY",d0
  82.     Beq    DecrunchIFF
  83.     Cmp.l    #"DPAN",d0
  84.     Beq    GetAnimVar
  85.     Cmp.l    #"DLTA",d0
  86.     Beq    GetDeltas
  87. EndHunk    Add.l    d1,a1
  88.     Btst    #0,d1
  89.     Beq    SkipTest
  90.     Addq.l    #1,a1
  91. SkipTest    Lea    AnimGFXData(pc),a5
  92.     Add.l    #EndFile-AnimGFXData,a5
  93.     Cmp.l    a5,a1
  94.     Blt    GetAnim
  95. ExitConv    Rts
  96.  
  97. GetBitVars    Lea    FrameWidth(pc),a5
  98.     Move.w    0(a1),0(a5)
  99.     Move.b    8(a1),2(a5)
  100.     Bra    EndHunk
  101.     
  102. GetAnimVar    Lea    FrameAm(pc),a5
  103.     Move.w    2(a1),(a5)
  104.     Bra.w    EndHunk
  105.  
  106. DecrunchIFF    Move.l    ScreenBase1(pc),a3
  107.     Move.l    d1,d7
  108.     Move.l    a1,a2
  109.     Move.l    a2,a4
  110.     Add.l    d1,a4
  111. DecLoop    Moveq    #0,d0
  112.     Move.b    (a2)+,d0
  113.     Bmi    GetByte
  114. DataLoop    Move.b    (a2)+,(a3)+
  115.     Dbf    d0,DataLoop
  116.     Bra    CheckLast
  117. GetByte    Cmp.b    #-128,d0
  118.     Beq    CheckLast
  119.     Neg.b    d0
  120.     Move.b    (a2)+,d2
  121. ByteLoop    Move.b    d2,(a3)+
  122.     Dbf    d0,ByteLoop
  123. CheckLast    Cmpa.l    a2,a4
  124.     Bgt    DecLoop
  125.     Bra    EndHunk
  126.     
  127. GetDeltas    Move.l    a1,a2
  128.     Move.l    FramePtr(pc),a4
  129.     Moveq    #0,d3
  130.     Move.b    BitplaneAm(pc),d3
  131.     Subq.b    #$1,d3
  132. SetPointers    Move.l    (a2)+,d2
  133.     Beq    NoPoint
  134.     Add.l    a1,d2
  135. NoPoint    Move.l    d2,(a4)+
  136.     Dbf    d3,SetPointers
  137.     Lea    FramePtr(pc),a5
  138.     Move.l    a4,(a5)
  139.     Bra    EndHunk
  140.  
  141. AnimFrame    Move.l    FramePtr(pc),a0
  142.     Move.l    ScreenBase1(pc),a5
  143.     Moveq    #0,d0
  144.     Moveq    #0,d1
  145.     Moveq    #0,d2
  146.     Moveq    #0,d4
  147.     Moveq    #0,d5
  148.     Moveq    #0,d6
  149.     Moveq    #0,d7
  150.     Move.b    BitplaneAm(pc),d7
  151.     Move.w    FrameWidth(pc),d5
  152.     Asr.w    #3,d5
  153.     Move.w    d5,d6
  154.     Mulu    d7,d6
  155. StartBitPlane    Move.l    (a0)+,a1
  156.     Cmp.l    #0,a1
  157.     Beq    NextBitPlane
  158.     Move.l    a5,a4
  159.     Move.w    d5,d4
  160. StartColumn    Move.b    (a1)+,d0
  161.     Beq    NextColumn
  162.     Move.l    a4,a3
  163. Depack    Move.b    (a1)+,d1
  164.     Beq    ByteRun
  165.     Bpl    SkipScans
  166.     And.w    #$7f,d1
  167. CopyData    Move.b    (a1)+,(a3)
  168.     Lea    (a3,d6.w),a3
  169.     Subq.b    #$1,d1
  170.     Bne    CopyData
  171.     Bra    NextCode
  172. ByteRun    Move.b    (a1)+,d1
  173.     Move.b    (a1)+,d2
  174. Replicate    Move.b    d2,(a3)
  175.     Lea    (a3,d6.w),a3
  176.     Subq.b    #$1,d1
  177.     Bne    Replicate
  178.     Bra    NextCode
  179. SkipScans    Lea    (a3,d6.w),a3
  180.     Subq.b    #$1,d1
  181.     Bne    SkipScans
  182. NextCode    Subq.w    #$1,d0
  183.     Bne    Depack
  184. NextColumn    Addq    #1,a4
  185.     Subq.w    #$1,d4
  186.     Bne    StartColumn
  187. NextBitPlane    Lea    (a5,d5.w),a5
  188.     Subq.b    #$1,d7
  189.     Bne    StartBitPlane
  190.     Lea    CurrFrame(pc),a6
  191.     Addq.w    #1,0(a6)
  192.     Move.l    a0,2(a6)
  193.     Move.w    FrameAm(pc),d1
  194.     Cmp.w    CurrFrame(pc),d1
  195.     Bge    SkipCell
  196.     Lea    CurrFrame(pc),a6
  197.     Lea    FrameLists+4(pc),a5
  198.     Move.w    #1,0(a6)
  199.     Move.l    a5,2(a6)
  200. SkipCell    Rts
  201.  
  202. CopyIFF    Lea    Piccy1,a0
  203.     Lea    Piccy2,a1
  204.     Lea    $Dff000,a6
  205.     Bsr    WaitBlitter
  206.     Move.l    #-1,BltAFWM(a6)
  207.     Move.l    #$09f00000,BltCon0(a6)
  208.     Move.l    a0,BltAPth(a6)
  209.     Move.l    a1,BltDPth(a6)
  210.     Move.l    #0,BltAMod(a6)
  211.     Move.w    #(256*64)+20,BltSize(a6)
  212.     Rts
  213.     
  214. WaitBlitter    Btst    #$6,$2(a6)
  215.     Bne    WaitBlitter
  216.     Rts
  217.  
  218. KillSys    Bsr.s    SysWait    
  219.  
  220.     Move.l    $4,a6    
  221.     Lea    GFXName(pc),a1    
  222.     Moveq    #0,d0    
  223.     Jsr    -552(a6)    
  224.         
  225.     Lea    OldCop1(pc),a5
  226.     Move.l    $26(a0),$0(a5)    
  227.     Move.l    $32(a0),$4(a5)    
  228.     
  229.     Lea    HardWare,a6
  230.     Move.w    IntEnaR(a6),d0    
  231.     Move.w    DMAConR(a6),d1  
  232.     Or.w    #$8000,d0    
  233.     And.w    #$03ff,d1    
  234.     Or.w    #$8000,d1    
  235.     Move.w    d0,$8(a5)    
  236.     Move.w    d1,$a(a5)    
  237.     
  238.     Move.w    #$7fff,IntEna(a6) 
  239.     Move.w    #$7fff,DMACon(a6) 
  240.     Rts
  241.  
  242. SysWait    Move.w    #15,d7    
  243. SysWaitLoop    Move.l    #$05000,d1    
  244.     Bsr.s    WaitVBL    
  245.     Bsr.s    DoWaitVBL    
  246.     Dbf    d7,SysWaitLoop    
  247.     Rts
  248.  
  249. DoWaitVBL    Move.l    #$03000,d1    
  250. WaitVBL    Movem.l    d0-d1/a6,-(sp)    
  251.     Lea    HardWare,a6    
  252. WaitVBLLoop    Move.l    VPosR(a6),d0    
  253.     And.l    #$1ff00,d0    
  254.     Cmp.l    d1,d0    
  255.     Bne.s    WaitVBLLoop    
  256.     Movem.l    (sp)+,d0-d1/a6    
  257.     Rts        
  258.  
  259. ReturnSys    Lea    HardWare,a6    
  260.     Move.w    OldIntEna(pc),IntEna(a6)
  261.     Move.w    OldDMACon(pc),DMACon(a6)
  262.     Move.l    OldCop1(pc),Cop1lc(a6)
  263.     Move.l    OldCop2(pc),Cop2lc(a6)
  264.     Rts
  265.  
  266. GFXName    Dc.b    "graphics.library",0
  267.     Even
  268. OldCop1    Dc.l    0    
  269. OldCop2    Dc.l    0    
  270. OldIntEna    Dc.w    0    
  271. OldDmaCon    Dc.w    0    
  272.  
  273. ScreenBase1    Dc.l    Piccy1
  274. ScreenBase2    Dc.l    Piccy2
  275. FrameWidth    Dc.w    0
  276. BitplaneAm    Dc.w    0
  277. FrameAm    Dc.w    0
  278. CurrFrame    Dc.w    0
  279. FramePtr    Dc.l    0
  280. FrameLists    Ds.l    50*6 
  281.  
  282. Cmv    Macro
  283.     Dc.w    \2,\1
  284.     EndM
  285.     
  286. Cwt    Macro
  287.     Dc.w    (\1*$100)+$01,$fffe
  288.     EndM    
  289.  
  290. Pal    Macro
  291.     Dc.w    $ffe1,$fffe
  292.     EndM    
  293.  
  294. EndCop    Macro
  295.     Dc.w    $ffff,$fffe
  296.     EndM    
  297.  
  298. CopperList    Cwt    $15    
  299.     Cmv    $0200,BplCon0    
  300.     Cmv    $00bb,BplCon1    
  301.     Cmv    $000a,BplCon2    
  302.     Cmv    $0034,DdfStrt    
  303.     Cmv    $00c8,DdfStop    
  304.     Cmv    $1681,DiwStrt    
  305.     Cmv    $36c1,DiwStop
  306.     Cmv    $0,BplMod1    
  307.     Cmv    $0,BplMod2    
  308.     
  309.     Cwt    $25        
  310.     Cmv    $0000,Color00    
  311.     Cmv    $0fff,Color01    
  312.     
  313. CopperBPLS    Cmv    $0,BplPt0h    
  314.     Cmv    $0,BplPt0l    
  315.     Cmv    $0,BplPt1h    
  316.     Cmv    $0,BplPt1l    
  317.     Cmv    $0,BplPt2h    
  318.     Cmv    $0,BplPt2l    
  319.     Cmv    $0,BplPt3h    
  320.     Cmv    $0,BplPt3l    
  321.     Cmv    $0,BplPt4h
  322.     Cmv    $0,BplPt4l 
  323.     
  324.     Cwt    $28    
  325.     Cmv    $1200,BplCon0    
  326.     
  327.     Pal
  328.     Cwt    $28    
  329.     Cmv    $0200,BplCon0
  330.                     
  331.     EndCop
  332.  
  333. AnimGFXData    Incbin    df0:Graphics/Anim2.IFF
  334. EndFile
  335.  
  336. ****Custom Chip Registers****
  337.  
  338. Hardware    = $Dff000
  339.  
  340. ;Control Registers
  341.  
  342. Dmaconr    = $002
  343. Vposr    = $004
  344. Vhposr    = $006
  345. Joy0dat    = $00A
  346. Joy1dat    = $00C
  347. Clxdat    = $00E
  348. Intenar    = $01C
  349. Intereqr    = $01E
  350. Copcon    = $02E
  351.  
  352. ;Blitter Registers
  353.  
  354. Bltcon0    = $040
  355. Bltcon1    = $042
  356. Bltafwm    = $044
  357. Bltalwm    = $046
  358. Bltcpth    = $048
  359. Bltcptl    = $04A
  360. Bltbpth    = $04C
  361. Bltbptl    = $04E
  362. Bltapth    = $050
  363. Bltaptl    = $052
  364. Bltdpth    = $054
  365. Bltdptl    = $056
  366. Bltsize    = $058
  367. Bltcmod    = $060
  368. Bltbmod    = $062
  369. Bltamod    = $064
  370. Bltdmod    = $066
  371. Bltcdat    = $070
  372. Bltbdat    = $072
  373. Bltadat    = $074
  374.  
  375. ;Copper Registers
  376.  
  377. Cop1lc    = $080
  378. Cop1lch    = $080
  379. Cop1lcl    = $082
  380. Cop2lc    = $084
  381. Cop2lch    = $084
  382. Cop2lcl    = $086
  383. Copjmp1    = $088
  384. Copjmp2    = $08A
  385. Diwstrt    = $08E
  386. Diwstop    = $090
  387. Ddfstrt    = $092
  388. Ddfstop    = $094
  389. Dmacon    = $096
  390. Clxcon    = $098
  391. Intena    = $09A
  392. Intreq    = $09C
  393.  
  394. ;BitPlane Registers 
  395.  
  396. BplCon0    = $100
  397. BplCon1    = $102
  398. BplCon2    = $104
  399. BplMod1    = $108
  400. BplMod2    = $10a
  401.  
  402. BplPt0h    = $0e0
  403. BplPt0l    = $0e2
  404. BplPt1h    = $0e4
  405. BplPt1l    = $0e6
  406. BplPt2h    = $0e8
  407. BplPt2l    = $0ea
  408. BplPt3h    = $0ec
  409. BplPt3l    = $0ee
  410. BplPt4h    = $0f0
  411. BplPt4l    = $0f2
  412. BplPt5h    = $0f4
  413. BplPt5l    = $0f6
  414.  
  415. ;Colour Registers
  416.  
  417. Color00    = $180
  418. Color01    = $182
  419. Color02    = $184
  420. Color03    = $186
  421. Color04    = $188
  422. Color05    = $18a
  423. Color06    = $18c
  424. Color07    = $18e
  425. Color08    = $190
  426. Color09    = $192
  427. Color10    = $194
  428. Color11    = $196
  429. Color12    = $198
  430. Color13     = $19a
  431. Color14     = $19c
  432. Color15     = $19e
  433. Color16     = $1a0
  434. Color17     = $1a2
  435. Color18     = $1a4
  436. Color19     = $1a6
  437. Color20     = $1a8
  438. Color21     = $1aa
  439. Color22     = $1ac
  440. Color23     = $1ae
  441. Color24     = $1b0
  442. Color25     = $1b2
  443. Color26     = $1b4
  444. Color27     = $1b6
  445. Color28     = $1b8
  446. Color29     = $1ba
  447. Color30     = $1bc
  448. Color31     = $1be
  449.  
  450. EcsNop    = $1fe
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.